package main

import "fmt"

/*
翻转图像
给定一个二进制矩阵 A，我们想先水平翻转图像，然后反转图像并返回结果。
水平翻转图片就是将图片的每一行都进行翻转，即逆序。例如，水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。
反转图片的意思是图片中的 0 全部被 1 替换， 1 全部被 0 替换。例如，反转 [0, 1, 1] 的结果是 [1, 0, 0]。
示例 1:
输入: [[1,1,0],[1,0,1],[0,0,0]]
输出: [[1,0,0],[0,1,0],[1,1,1]]
解释: 首先翻转每一行: [[0,1,1],[1,0,1],[0,0,0]]；
      然后反转图片: [[1,0,0],[0,1,0],[1,1,1]]
 */

func flipAndInvertImage(A [][]int) [][]int {
	row, column := len(A), len(A[0])
	for i := 0; i < row; i++ {
		for j := 0; j < column/2; j++ {
			A[i][j], A[i][column-j-1] = A[i][column-j-1], A[i][j]
		}
	}
	fmt.Println(A)
	for i := 0; i < row; i++ {
		for j := 0; j < column; j++ {
			if A[i][j] == 0{
				A[i][j] = 1
			}else {
				A[i][j] = 0
			}
		}
	}
	return A
}

func main() {
	a := [][]int{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
	//fmt.Printf("翻转前的切片%v\n", a)
	//row, column := len(a), len(a[0])
	//for i := 0; i < row; i++ {
	//	for j := 0; j < column/2; j++ {
	//		a[i][j], a[i][column-j-1] = a[i][column-j-1], a[i][j]
	//	}
	//}
	//fmt.Printf("翻转后%v\n", a)
	fmt.Println(flipAndInvertImage(a))
}
